#!/bin/bash
##
## mkrootfs.sh

## Fedora 2.6.18 试验成功

export PRJROOT=${HOME}/project
export ROOTFS=${PRJROOT}/rootfs

mkdir -pv ${ROOTFS}

#创建16M大小的文件 ramdisk
cd ${PRJROOT}
dd if=/dev/zero of=ramdisk bs=1M count=16


#将环回设备和ramdisk文件进行关联，之后对loop device的访问会映射到对此对应文件的访问
losetup /dev/loop0 ramdisk

#在环回设备上创建文件系统
mkfs -t ext2 /dev/loop0

#将创建的文件系统挂载到指定目录
mount -v /dev/loop0  ${ROOTFS}

### 一步到位
## mount -o loop ramdisk ${ROOTFS} 

#查看磁盘使用情况
df -h

cd ${ROOTFS}

##创建HFS标准目录结构（顶层目录结构）
mkdir -v bin boot dev etc home lib media mnt opt \
         proc root sbin sys tmp usr var

##开启tmp目录的sticky位，确保tmp目录下所建立的文件，只有建立它的用户
##才有权删除
chmod -v 1777 tmp

## 建立usr目录结构
mkdir -v usr/bin usr/lib usr/sbin 
##
mkdir -v lib/modules

## 建立var目录结构
mkdir -v var/lib var/lock var/log var/run var/tmp
chmod -v 1777 var/tmp

## 拷贝busybox _install目录中的内容到 当前目录
#cp -Rv _install/ .
echo -n "where is busybox directory:"
read busybox
cp -Rv ${busybox}/_install/* .

## 创建设备文件
#cd dev/
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3

sudo cp -av /dev/{null,console,tty,tty1,tty2,tty3,tty4} dev/

cd ${ROOTFS}/etc
## 创建fstab
cat > fstab << "EOF"
# filesystem mountpoint type 
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
EOF

## 创建 etc/inittab
cat > inittab << "EOF"
#/etc/inittab
::sysinit:/etc/init.d/rcS  
console::respawn:-/bin/sh  
::ctrlaltdel:/sbin/reboot  
::shutdown:/bin/umount -a -r  
EOF

## 创建init.d/rcS
mkdir -v init.d
cd init.d
cat > rcS <<"EOF"
#!/bin/sh
mount -a
EOF


##
cd ${ROOTFS} 
rm -v linuxrc

cat > init << "EOF"
#!/bin/busybox sh         
mount -t proc none /proc  
mount -t sysfs none /sys  

exec /sbin/init
EOF

chmod a+x init

#ln -sv bin/busybox init

# chroot test
#chroot "${ROOTFS}" /bin/sh
#exit

find . -print0 | cpio --null -H newc -ov | gzip -9 -n > ${PRJROOT}/initrd.img